#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
#include <unistd.h>
#include <string.h>
//指针是类型。可以定义变量常量。

//      大楼
// 门牌号	房间存放
// 0	    苹果
// 1	    香蕉
// 2	    梨子
// 3	    椰子
// 4	    马
// 5	    牛
// 6	    羊
// 7	    筷子
// 8	    勺子
// 9	    锅
// 10	    刘邦
// 11	    韩信
// 12	    萧何
// 13	    水
// 14	    火
// 15	    土

//   内存
// 地址	内容
// 0	100
// 1	99
// 2	98
// 3	97
// 4	96
// 5	95
// 6	94
// 7	93
// 8	92
// 9	91
// 10	90
// 11	89
// 12	88
// 13	87
// 14	86
// 15	85

// 简介指针变量。
// 指针变量可以保存一个地址。
// NULL=0无效地址
// 地址占用内存空间根据系统而定，32位系统为4字节、64为系统为8字节。
int main(int argc, char **argv)
{
    int a = 0;
    int *b = &a;
    printf("[%s,%d]a=%d,&a=%p,b=%p,&b=%p,*b=%d,b[0]=%d,sizeof(ptr)=%d\n", __FILE__, __LINE__, a, &a, b, &b, *b, b[0], (int)sizeof(b));

    a = 1;
    printf("[%s,%d]a=%d,&a=%p,b=%p,&b=%p,*b=%d,b[0]=%d,sizeof(ptr)=%d\n", __FILE__, __LINE__, a, &a, b, &b, *b, b[0], (int)sizeof(&a));

    *b = 2;
    printf("[%s,%d]a=%d,&a=%p,b=%p,&b=%p,*b=%d,b[0]=%d,sizeof(ptr)=%d\n", __FILE__, __LINE__, a, &a, b, &b, *b, b[0], (int)sizeof(&b));

    b[0] = 3;
    printf("[%s,%d]a=%d,&a=%p,b=%p,&b=%p,*b=%d,b[0]=%d,sizeof(ptr)=%d\n", __FILE__, __LINE__, a, &a, b, &b, *b, b[0], (int)sizeof(void *));

    return 1;
}
